package com.heima.user.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.heima.common.exception.CustomException;
import com.heima.model.common.enums.AppHttpCodeEnum;
import com.heima.model.user.dtos.LoginDto;
import com.heima.model.user.dtos.LoginResDto;
import com.heima.model.user.pojos.ApUser;
import com.heima.user.service.ApUserService;
import com.heima.user.mapper.ApUserMapper;
import com.heima.utils.common.AppJwtUtil;
import com.heima.utils.common.MD5Utils;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.List;

/**
* @author 10026
* @description 针对表【ap_user(APP用户信息表)】的数据库操作Service实现
* @createDate 2024-02-22 16:37:16
*/
@Service
public class ApUserServiceImpl extends ServiceImpl<ApUserMapper, ApUser>
    implements ApUserService{

    @Override
    public LoginResDto loginAuth(LoginDto loginDto) {
        // 获取用户名密码
        String password = loginDto.getPassword();
        String phone = loginDto.getPhone();
        LoginResDto loginResDto = new LoginResDto();
        // 不包含用户名密码
        if (StringUtils.isEmpty(phone)&&StringUtils.isEmpty(password)){
            // 游客
            String token = AppJwtUtil.getToken(0L);

            loginResDto.setToken(token);
        }else{
            // 正常用户
            if (StringUtils.isEmpty(phone)||StringUtils.isEmpty(password)){// 校验用户名密码是否为空
                throw new CustomException(AppHttpCodeEnum.LOGIN_PHONE_PASSWORD_IS_NULL);
            }

            // 根据手机号 查询用户信息
            LambdaQueryWrapper<ApUser> queryWrapper = new LambdaQueryWrapper<>();
            // 用户名条件
            queryWrapper.eq(ApUser::getPhone,phone);
            // 正常用户 状态为1
            queryWrapper.eq(ApUser::getStatus,1);

            List<ApUser> list = super.list(queryWrapper);
            // 教研用户是否存在
            if (list==null||list.size()==0){
                throw new CustomException(AppHttpCodeEnum.AP_USER_DATA_NOT_EXIST);
            }
            // 获取到用户信息
            ApUser apUser = list.get(0);
            // 加密后的密码
            String encodePwd = apUser.getPassword();
            // 盐
            String salt = apUser.getSalt();
            String encode = MD5Utils.encode(password + salt);
            if (!encode.equals(encodePwd)){
                throw new CustomException(AppHttpCodeEnum.LOGIN_PASSWORD_ERROR);
            }
            // 敏感数据脱敏
            apUser.setPassword("******");
            apUser.setSalt("******");
            loginResDto.setUser(apUser);
            String token = AppJwtUtil.getToken(apUser.getId());
            loginResDto.setToken(token);
        }
        return loginResDto;
    }
}




